在建置這個模型的過程中,挑選和計算關鍵特徵很重要。這些特徵不只可以幫助我們的模型更懂市場趨勢,還能掌握投信的進出動作,讓我們在預測股價走勢時更有把握。本篇我想來聊一下我們手上已經有的數據,以及接下來要怎麼利用這些數據來計算出一些進階特徵。
我們擁有台灣股市從2020年1月2日至2024年9月27日期間的每日交易數據,涵蓋所有具有投信買賣紀錄的股票。這些數據其實已經可以幫我們做一些基本的技術分析,接下來還可以用來算出更進階的特徵。
現在有的欄位大概如下:
有了這些欄位之後,我們就可以進一步來算一些更有用的進階特徵。
為了讓LSTM模型能更精準地預測未來股價,我們可以利用現有的數據來計算以下幾個進階特徵。這些特徵可以幫我們更好地理解市場趨勢,並分析投信的行為。
投信介入力道
每日買賣超淨額佔總成交量比例:
這個特徵可以幫我們了解投信對這支股票的影響力。程式大概這樣寫:
投信介入力道 = Buy_Sell_Net / Trading_Volume
比例越大,表示投信對這支股票的「力道」越強。
累積買賣超淨額:
我們可以累積投信過去幾天的買賣超淨額,這樣可以看到他們是否持續佈局這支股票。這個特徵不僅能幫助我們看到投信的長期佈局,還能偵測到投信的「突然介入」。當某天的買賣超淨額突然大增,累積數值會在短期內跳升,這可能是投信大幅進場的跡象。
計算方式大概這樣:
累積買賣超淨額_5天 = Buy_Sell_Net.rolling(window=5).sum()
假設要偵測到投信突然大幅介入,你可以這樣設定條件:
if 累積買賣超淨額_5天 - 累積買賣超淨額_5天.shift(1) > 某個閾值:
print("投信突然介入")
當累積買賣超淨額在短時間內大幅上升時,我們就可以捕捉到投信的突擊佈局。
葛蘭必突破
葛蘭必突破中很重要的是移動平均線(MA),用來觀察價格的趨勢,之前我們有寫過一篇專門在講葛蘭必突破的計算方法,可以參考這裡。這邊我再將長中短均線的計算方式列出來:
短期MA (MA30):
短期MA能幫助我們看短期內價格的波動。假設要計算MA30,程式是這樣:
MA5 = close.rolling(window=30).mean()
中期MA (MA100):
MA100用來判斷中期的趨勢,常常用來看股價變動的方向,程式大概這樣:
MA50 = close.rolling(window=100).mean()
長期MA (MA200):
MA200則是用來看長期趨勢,幫助我們判斷市場的整體走向:
MA200 = close.rolling(window=200).mean()
RSI (相對強弱指數)
RSI可以幫我們判斷這支股票是「超買」還是「超賣」。RSI值通常在0到100之間,計算方式稍微複雜一點,但程式如下:
delta = close.diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
RS = gain / loss
RSI = 100 - (100 / (1 + RS))
當RSI超過70時,表示股票可能超買,價格可能會回調;如果低於30,則可能是超賣,價格有機會反彈。
帶寬指標值(Bandwidth Indicator)
帶寬指標值用來衡量布林通道的波動範圍,並且將這個範圍標準化,使其相對於中線(通常是20天移動平均線)。這樣可以幫助我們更好地比較不同時期或不同股票的波動性。計算方式如下:
帶寬指標值 = (上軌 - 下軌) / MA20